//package com.shopoo.oauth.domain.service;
//
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.stream.Collectors;
//
//import javax.annotation.Resource;
//
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.bngrp.common.exception.BusinessException;
//import com.bngrp.oauth2.application.user.dto.RoleOption;
//import com.bngrp.oauth2.domain.exception.ExceptionEnum;
//import com.bngrp.oauth2.domain.repo.RoleMenuRepository;
//import com.bngrp.oauth2.domain.repo.RoleRepository;
//import com.bngrp.oauth2.domain.service.RoleService;
//import com.bngrp.oauth2.infrastructure.converter.Converter;
//import com.bngrp.oauth2.infrastructure.db.dataobject.RoleMenuDO;
//import com.bngrp.oauth2.infrastructure.db.entity.OauthRole;
//
//import org.springframework.dao.DuplicateKeyException;
//import org.springframework.stereotype.Service;
//
///**
// * 角色表(TSystemRole)表服务实现类
// *
// * @author makejava
// * @since 2020-05-23 10:00:45
// */
//@Service
//public class RoleDomainService {
//
//    @Resource
//    private RoleRepository roleRepository;
//
//    @Resource
//    private RoleMenuRepository roleMenuRepository;
//
//    @Override
//    public OauthRole findById(Long roleId) {
//        return roleRepository.getById(roleId);
//    }
//
//    @Override
//    public List<OauthRole> findAll() {
//        LambdaQueryWrapper<OauthRole> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.orderByAsc(OauthRole::getRoleId);
//        return roleRepository.list(queryWrapper);
//    }
//
//    @Override
//    public List<RoleOption> findAllValidRole() {
//        LambdaQueryWrapper<OauthRole> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(OauthRole::getStatus, 1);
//        queryWrapper.orderByAsc(OauthRole::getRoleId);
//        List<OauthRole> list = roleRepository.list(queryWrapper);
//        return list.stream().map(oauthRole -> {return Converter.INSTANCE.toRoleOption(oauthRole);}).collect(Collectors.toList());
//    }
//
//    @Override
//    public Set<Long> findRolesByUserId(String userId) {
//        List<OauthRole> list = roleRepository.findByUserId(userId);
//        return list.stream().map(oauthRole -> {return oauthRole.getRoleId();}).collect(Collectors.toSet());
//    }
//
//    @Override
//    public Long save(OauthRole oauthRole) {
//        Long roleId = System.currentTimeMillis();
//        oauthRole.setRoleId(roleId);
//        try {
//            roleRepository.save(oauthRole);
//        } catch (DuplicateKeyException e) {
//            throw new BusinessException(ExceptionEnum.ROLENAME_ALREADY_EXISTS);
//        }
//        return roleId;
//    }
//
//    @Override
//    public void update(OauthRole oauthRole) {
//        boolean flag = true;
//        try {
//            flag = roleRepository.updateById(oauthRole);
//        } catch (DuplicateKeyException e) {
//            throw new BusinessException(ExceptionEnum.ROLENAME_ALREADY_EXISTS);
//        }
//        if (!flag) {
//            throw new IllegalArgumentException("更新失败");
//        }
//    }
//
//    @Override
//    public void deleteById(Long roleId) {
//        roleRepository.removeById(roleId);
//    }
//
//    @Override
//    public List<String> getAllRoleMenus() {
//        List<RoleMenuDO> list = roleMenuRepository.findRoleMenus();
//        List<String> oList = list.stream().map(roleMenuDO -> {
//            return roleMenuDO.toString();
//        }).collect(Collectors.toList());
//        return oList;
//    }
//
//    private Map<String, List<String>> transform(List<RoleMenuDO> list) {
//        Map<String, List<String>> map = new HashMap<>();
//        list.forEach(roleMenuVO -> {
//            String name = roleMenuVO.getName();
//            List<String> menus = map.get(name);
//            if (menus.isEmpty()) {
//                menus = new ArrayList<>();
//            }
//            menus.add(roleMenuVO.getUrl());
//            map.put(name, menus);
//        });
//        return map;
//    }
//}